/**
 * Changes:
 * -Creates an empty List and adds some events
 * -The method 
 */

package eventReservationServer.eventServerGateway;

import java.util.ArrayList;
import java.util.List;
import corbaServer.corba.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

public class CorbaEventServerGateway implements IEventServerGateway
{
	String name = null;
	String ip = null;
	String port = null;
	
	public CorbaEventServerGateway(String serverName, String serverIp, String serverPort)
	{
		name = serverName;
		ip = serverIp;
		port = serverPort;
	}

	public List<EventDO> getEvents()
	{
		// Variable donde se recibe la respuesta del servidor
		EventDTO[] events = null;
		
		// Variable donde parseamos la respuesta de este método
		List<EventDO> result = new ArrayList<EventDO>();

		// Para debuggear: hacer esto con llamada al servidor correspondiente
//		EventDO event = new EventDO(1, "BBK Live", "7/7/2012",
//				"Conciertos BBK Live", 200);

		try
		{
			// Crear un objeto ORB
			String[] orb_args = { "-ORBInitialHost", ip, "-ORBInitialPort", port };
			ORB orb = ORB.init(orb_args, null);
			
			// Localizar el objeto CORBA del servidor mediante el Servicio de Nombres
			
				// Obtener una referencia al servicio de nombres de CORBA
				org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
			
				// Transformar la referencia genérica a una específica para el servicio de nombres
				NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
			
				// Obtener una referencia al objeto CORBA del servidor mediante el servicio de nombres
				//String name = servername; Ahora ya tenemos el nombre desde que se construye la clase
				ICorbaServer objServidor = ICorbaServerHelper.narrow(ncRef.resolve_str(name));
			
			// Invocar el método del objeto CORBA
			events = objServidor.getEvents();
		}
		catch (Exception e)
		{
			System.out.println("ERROR: " + e);
			e.printStackTrace(System.out);
		}

		for (EventDTO eventDTO : events)
		{
			EventDO eventDO = new EventDO(1, eventDTO.name, eventDTO.date, eventDTO.description, eventDTO.places);
			result.add(eventDO);
		}
		
		return result;
	}
}
